home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 5
/
Apprentice-Release5.iso
/
Source Code
/
C
/
Applications
/
GW AdaEd 1.4.2
/
GWAdaDemos
/
readme.nyu
< prev
Wrap
Text File
|
1994-12-12
|
24KB
|
552 lines
This is the original NYU documentation for Ada/Ed.
1. INTRODUCTION.
This file is the README file from the distribution of Ada/Ed version
1.11.2-PC, an Ada interpreter for 386/486 machines running MS-DOS/PC-DOS.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Purpose License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. See relevant excerpts below.
Ada/Ed is a translator-interpreter for Ada. It is intended as a teaching
tool, and does not have the capacity, performance, or robustness of
commercial Ada compilers. Ada/Ed was developed at New York University, as
part of a long-range project in language definition and software prototyping.
The project produced the first validated translator for Ada, in the form of
an executable definition of the language written in SETL. The SETL system
served as design document and prototype for the C version being released today.
Ada/Ed was last validated under version 1.7 of the ACVC tests. Therefore it is
not currently a validated Ada system, and users can expect to find small
discrepancies between Ada/Ed and currently validated compilers.
Apart from the 100-odd tests of ACVC 1.11 that Ada/Ed currently fails, the
major deficiency of the system is that, being an interpreter, it does not
implement most representation clauses, and thus does not support systems
programming close to the machine level.
We trust that even with these limitations, Ada/Ed will be of use to the
Ada community at large: students, educators, user, and implementors. The
sources of the system should be of interest to compiler writers, and we hope
that they will encourage the construction of software tools to make the system
more usable and polished. The NYUADA project does not have the resources to
promise regular new maintenance releases of the software, but will do its
best to keep track of reported errors, workarounds, and fixes. We will also
produce at irregular intervals design notes and additional documentation on
the front-end of the system. We urge users to send comments, corrections
and bug reports (reduced to their simplest form!) to: adaed@cs.nyu.edu
All users of Ada/Ed are urged to register themselves by
sending email to the above address, or to the NYUADA project, New
York University, 251 Mercer Street, New York, NY 10012. This will allow us to
notify users of updates and new releases of the system.
2. (UN) WARRANTY
This software is release 1.11.2-PC of the Ada/Ed system.
It is distributed absolutely WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
To receive a copy of the GNU General Public License write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139.
The following is an excerpt from the GNU General Public License concerning
warranties:
Because the program is licensed free of charge, there is no warranty
for the program, to the extent permitted by applicable law. Except when
otherwise stated in writing the copyright holders and/or other parties
provide the program "as is" without warranty of any kind, either expressed
or implied, including, but not limited to, the implied warranties of
merchantability and fitness for a particular purpose. The entire risk as
to the quality and performance of the program is with you. Should the
program prove defective, you assume the cost of all necessary servicing,
repair or cowriting
will any copyright holder, or any other party who may modify and/or
redistribute the program as permitted above, be liable to you for damages,
including any general, special, incidental or consequential damages arising
out of the use or inability to use the program (including but not limited
to loss of data or data being rendered inaccurate or losses sustained by
you or third parties or a failure of the program to operate with any other
programs), even if such holder or other party has been advised of the
possibility of such damages.
3. INSTALLATION
To intall Ada/Ed choose a directory to contain the executables and
library files; include this directory on the PATH; set the environment
variable ADAED to the pathname for this directory; and copy the files
*.exe, predef.axq, predef.trc, and predef.lib into the directory.
For example, if the directory chosen is C:\ADAED, then the AUTOEXEC.BAT
might contain lines such as:
PATH=C:;C:\ADAED
SET ADAED=C:\ADAED
If you already have a number of SET commands in your AUTOEXEC.BAT file
then you might not be able to add the additional SET commands needed
for Ada/Ed-C. If you have DOS 3.2 (or later) this can be overcome by
adding the following to your CONFIG.SYS file:
SHELL=C:\COMMAND.COM /P /E:320
For DOS 3.2 the E: option tells DOS to allocate the specified number
of bytes for the environment. The first argument points to a copy
of COMMAND.COM on the hard disk; adjust this if you do not keep
COMMAND.COM in the root directory. This command also works (but is
not doumented) under DOS 3.1, but for DOS 3.1, the argument is in
paragraphs rather that bytes (so write /E:20 to get 320 bytes).
Before using the compiler you must make sure that your CONFIG.SYS file
allows the system to open at least 12 files. Check this by looking in
your CONFIG.SYS file for the following line:
FILES=number
If number is less that 12, edit the CONFIG.SYS and set number to a value
not less that 12. If you do not currently have a CONFIG.SYS file, create
a file of that name on your system disk (or root diectory if you boot from
a hard disk) and insert the following line:
FILES=12
Note that if the value of FILES is too small, you will get the message
"Unable to open file ..." when compiling even the simplest program.
You may also want to use the BUFFERS command to specify a larger number of
buffers. This is not required, but specifying more that the default number
of buffers should substantially improve Ada/Ed-C performance. A minimum
value of 15 is recommended, so add
BUFFERS=15
to your CONFIG.SYS file. A value larger than 15 will further increase
performance, however it might begin to decrease the size of programs that
can be compiled by decreasing the available memory.
Try some of the supplied demo program (see the readme in the demos directory)
Also look at the release.notes for more information about the system and
the changes that have take place.
4. REBUILDING
Ada/Ed is written in C, and built using Intel's 386/486 C Code Builder.
The sources and makefile for doing this are part of the distribution. To
rebuild, read the makefile and execute "make" and "make predef.lib" or
just "make predef.lib". In particular, note the comment in the makefile
about the include file makeext. After rebuilding, follow the installation
instructions above.
5. USING Ada/Ed
The Ada/Ed system includes the following commands:
adacomp [ -abgsv ] [ -m main_unit ] [ -n ] [-l library ] file
adabind [ -m main_unit ] [-l library]
adaexec [ -h heap] [ -m bound_main_unit ] [-p pstack] [-s tstack]
[ -r nb_stmts] [ -t [acerst] ] [-l library]
adalib [-l library]
Description
Ada/Ed is a translator/interpreter for the Ada programming language that
is intended primarily for educational use.
Adacomp compiles an Ada program; it invokes in succession the two
compilation phases: parsing and semantic analysis (the front end) ,and
code generation. The file argument refers to the source file; if no
extension is given for it, the extension ADA is assumed. The file argument
may contain drive and directory specifications. The output of the compiler
is an instruction stream for an abstract Ada machine, which is then
interpreted.
Adabind binds a given library with the specified main unit to form an
executable program.
Adaexec invokes the Ada machine interpreter for the bound program given in
the specified library.
Adalib displays the contents of the specified library.
Note : All options must precede the file name and may be in either lower or
upper case.
Program Library
All compilations require a library. A library is a directory, which is
created or reinitialized when the user invokes a command containing a -n
option such as:
adacomp -n -l libname adafile
Intermediate files appear in directory libname. This directory is created by
the command if it does not already exist. Only the listing files are created
in acomp command (i.e. those
produced by the Ada/Ed system); confusion and grief may result if you attempt
to use a library directory to hold other files. The libname argument may
contain drive and path specifications.
The libname argument can be omitted if the environment variable ADALIB is
defined. For example, if you are doing several compilations referring to
the same library you can use the command
SET ADALIB=C:\MYLIB
to indicate the library to be used. In this way the -l option (including
its library name argument) to adacomp, adabind, adaexec and adalib can be
omitted.
A given utility library UL (e.g. one that contains mathematical functions)
may be used by several unrelated programs. It may then be convenient to
create independent libraries for each program, and initialize each library
with the contents of UL. This can be done simply by creating directories
for each library, and copying the contents of UL into each of these, using
DOS commands.
Options
The options for adacomp are as follows:
-a Generates instructions for use by the interpreter (adaexec) to
trace the ada source lines, and is used in conjunction with the
-t a option of adaexec. This is also necessary to get at run-time
the source line number at which an exception is raised.
-b Indicates that the binding of the library is to be performed if
the current compilation is completed without errors.
-g Specifies that the compiler is to produce a listing of the
generated instructions for the Ada machine (of little interest
to most users).
-l library
Uses the specified library to satisfy references to compilation
units not present in the file being compiled. If the compilation
is successful, the units defined in the file are added to the
library. If the -l option is not used, the environment symbol
ADALIB specifies the library.
-m unit_name
Specifies the name of the unit which is to serve as a main unit.
When the library contains only one main program - which must be a
parameterless procedure - this option is not needed. This is an
option to the binder and is only relevant if the -b option is used.
-n Indicates that a new library is to be created for this compilation.
The name of the library is indicated by the -l option or by use of
the ADALIB environment symbol. The -n option must be specified if
the library referenced by the -l option does not already exist or
if the user wants to reinitialize it.
-s Obtain a listing of the source file. The filename of the listing
file is the input file name with a filename extension of LST, and
is written in the directory from which the adacomp command is
invoked. By default a listing is not generated unless there are
warnings, errors or informational messages to report.
-v Give a descriptive trace showing the subsidiary programs invoked
by the adacomp command, the arguments passed to them, and their
exit status. This is used primarily for system checkout.
The options for adabind are as follows:
-l library
Specifies the library which together with the main unit will produce
a bound program which can be executed by adaexec. If this option is
not specified explicitly, a default library is implicitly defined by
the environment symbol ADALIB.
-m unit_name
Specifies the name of the unit which is to serve as a main unit.
When the library contains only one main program - which must be a
parameterless procedure - this option is not needed.
The options for adaexec are as follows:
-l library
Specifies the library which contains the bound program to be executed.
If this option is not specified explicitly, a default library is
implicitly defined by the environment symbol ADALIB.
-m unit_name
Specifies the name of the bound main unit, i.e. the main unit that
was specified to adabind or adacomp. Note that a given library may
have been bound several times with different main units. When the
library has been bound with only one main unit this option is not
needed.
-h heap
Specifies the size of the heap increment in kilowords, by which the
heap is expanded when the elaboration of a new entity requires it.
The heap expands to fill available memory. The default increment is
32. This parameter limits the size of the largest object that can be
created in a program.
-p pstack
Specifies the size in bytes of the program stack size for the main
task. The default is 4096. Argument values in the range 1..31 are
multiplied by 1024 to obtain the stack size in bytes. The maximum
value is 32767.
-s tstack
Specifies the size in bytes of the stack size for each new task.
The default is 2048. Argument values in the range 1..31 are multiplied
programs with many tasks, each of
which can run with a small stack. The maximum value is 32767.
-r number_of_statements (an integer)
Invoke a 'round-robin' scheduling policy instead of the 'run-until-
-block' default scheduling policy and specify the maximum number of
interpreted statements that a given task can execute before switching
to another task. (the minimum value is 1).
-t [acerst]
Specify the kind of trace requested for the execution of the program:
a Display the source line numbers. This requires that the program
be compiled with the -a option.
c Display the name of each routine as it is entered and exited.
e Display the name of each exception as it is raised.
r Trace each rendezvous.
s Display the context-switches between tasks.
t Display task creation, activation, and termination.
Examples
The following examples show typical usage:
1. Compile T1.ADA into a new library called TSTLIB and bind the library,
and then execute it. The listing is written to T1.LST. The -s option
is used to force a listing file to be created.
adacomp -s -n -l tstlib -b t1
adaexec -l tstlib
2. Compile a package specification in P.SPC and the corresponding body
in P.BOD, into a new library called TSTLIB. Then compile T2.ADA into
the same library, bind the main program, and then execute it.
adacomp -n -l tstlib p.spc
adacomp -l tstlib p.bod
adacomp -l tstlib -b t2
adaexec -l tstlib
3. In the example above, the binding could be done in a separate phase.
This is achieved by replacing the third command above with:
adacomp -l tstlib t2
adabind -l tstlib
4. Example 2 above could be done without explicitly specifying the
library by defining the environment symbol adalib as follows:
set adalib=c:\mylib
adacomp -n p.spc
adacomp p.bod
adacomp -b t2
adaexec
5. Compile a program with line numbers included in the generated code.
Execute it displaying source line numbers as they are encountered.
adacomp -a -l -b tstlib t1
adaexec -t a -l tstlib
6. Compile a program with two parameterless procedures (potential main
programs) which are named MAIN1 and MAIN2 and bind the library TSTLIB
using MAIN1 as the main program.
adacomp -n -l tstlib p1
adacomp -l tstlib p2
adabind -m main1 -l tstlib
adaexec -l tstlib
7. Suppose we wish to add another program to the library TSTLIB (created
in Example 6) whose main program unit is named MAIN3 and appears in
file P3.ADA. The following commands will compile and execute MAIN3.
As TSTLIB was previously bound with MAIN1 as a main unit, it is now
necessary to use the -m option on the adaexec command in order to
select the desired bound main unit.
adacomp -l tstlib p3
adabind -m main3 -l tstlib
adaexec -m main3 -l tstlib
8. The contents of a library can be examined with:
adalib -l tstlib
Adalib writes to the standard output the name, type and compilation
date of each compilation unit. In addition, it writes the current
status (active or obsolete) of each unit. Units which may be main
programs are noted by "(Main)"; if there is more than one such unit,
the -m option of adabind must be specified during binding. Libraries
that have been bound will contain at least one unit labelled "binding
unit". If several of those are active, the -m option must be specified
for adaexec.
9. The DOS redirection facilities can be used with the adaexec and
adalib commands. In particular, use with the adaexec command permits
a program to associate the default input and output files with
specified files; for example,
adaexec -l tstlib <i.dat >o.dat
causes execution of the bound program in library TSTLIB with standard
input taken from I.DAT and standard output written to O.DAT. The
output from adalib may also re redirected.
Diagnostics, Exit Codes and Termination
Adaed commands return an exit code of 0 in the case of success, and
nonzero otherwise. An error code of 1 indicates errors in usage of the
Ada language, 2 is returned if there is an internal system error, and
3 denotes some invalid usage of the system. Error messages regarding
invalid system usage are directed to the standard error file. Ada-language
related messages detected by adacomp are written to the listing file,
while those detected by adabind or adaexec appear on standard output.
Note that an error in a given compilation unit may cause subsequent
compilation units (within the same compilation) not to be recognized.
Any compilation or execution that terminates abnormally with the error
message "capacity limit exceeded" indicates a program l error" has uncovered a bug that should be
reported to the NYU Ada group (adaed@cs.nyu.edu).
6. APPENDIX F
(1) The form, allowed places, and effect of implementation dependent
pragmas.
NYU Ada/Ed does not recognize any implementation dependent pragmas.
The language defined pragmas are correctly recognized and their
legality is checked, but, with the exception of LIST, PRIORITY, and
INTERFACE they have no effect on the execution of the program.
A warning message is generated to indicate that the pragma
is ignored by Ada/Ed.
(2) The name and the type of every implementation dependent attribute.
There are no implementation dependent attributes in NYU Ada/Ed.
(3) The specification of the package system (see 13.7).
package SYSTEM is
type SEGMENT_TYPE is new INTEGER range 0..255;
type OFFSET_TYPE is new INTEGER range 0..32767;
type ADDRESS is record
SEGMENT: SEGMENT_TYPE := SEGMENT_TYPE'LAST;
OFFSET: OFFSET_TYPE := OFFSET_TYPE'LAST;
end record;
type NAME is (ELXSI_BSD, ELXSI_ENIX, PC_DOS,
SUN_UNIX, VAX_UNIX, VAX_VMS) ;
SYSTEM_NAME : constant NAME := PC_DOS;
STORAGE_UNIT : constant := 8;
MEMORY_SIZE : constant := 2**16 - 1;
-- System Dependent Named Numbers:
MIN_INT : constant := -2**31;
MAX_INT : constant := 2**31 - 1;
MAX_DIGITS : constant := 6;
MAX_MANTISSA : constant := 31;
FINE_DELTA : constant := 2.0 ** (-30);
TICK : constant := 0.01;
-- Other System Dependent Declarations
subtype PRIORITY is INTEGER range 0 .. 4;
SYSTEM_ERROR : exception;
-- raised if internal check fails
end SYSTEM;
(4) The list of all restrictions on representation clauses (see 13.1).
NYU Ada/Ed supports the representation clauses for SMALL for
fixed points specifying powers of 2 and 10. NYU Ada/Ed supports
no other representation clauses, and a program containing any
instance of any representation clause is considered to be illegal.
(5) The conventions used for any implementation-generated name
denoting implementation-dependent components (see 13.4).
NYU Ada/Ed does not provide any system generated names denoting
system dependent entities, since in any case, representation
specifications are not permitted.
(6) The interpretation of expressions that appear in address clauses.
Addresses in NYU Ada/Ed are fully supported. The ADDRESS type
defined in the package SYSTEM is a record consisting of two fields.
The first is an unsigned byte which contains the segment number.
The second is the offset within the segment, ranging from 0
to 32767.
(7) Any restriction on unchecked conversions (see 13.10.2).
NYU Ada/Ed will correctly recognize and check the validity of any
use of unchecked conversion. However, any program which executes
an unchecked conversion is considered to be erroneous, and the
exception PROGRAM_ERROR will be raised.
(8) Any implementation-dependent characteristics of the input-output
packages (see 14).
A) Temporary files are fully supported. The names are generated
using the "tmpnam" C library function and therefore will not
interfere with any existing file.
B) Deletion of files is fully supported.
C) Only one internal file may be associated with the same external
file (No multiple accessing of files allowed).
D) File names used in the CREATE and OPEN procedures are standard
Unix file names. The function FORM returns the string given as
FORM parameter when a file is created. No system-dependent
characteristics are associated with that parameter.
E) A maximum of 20 files can be open at any given time during
program execution.
F) The standard input file is stdin; the standard output file
is stdout.
G) SEQUENTIAL_IO and DIRECT_IO support constrained array types,
record types without discriminants and record types with
discriminants with defaults. SEQUENTIAL_IO and DIRECT_IO are not
supported for unconstrained types.
H) I/O on access types is possible, but usage of access values
read in another program execution is erroneous.
I) Normal termination of the main program causes all open files
to be closed, and all temporary files to be deleted.
J) LOW_LEVEL_IO is not supported.
K) The form feed character (ASCII.FF) is used as the page
terminator indicator. Its use as a data element of a file is
therefore undefined.
(9) The Implementation Limitations.
The maximum identifier length (number of characters): 120
The maximum number of characters in a source line: 120
The maximum number of lines in a source file: 32767
Generic declarations and their corresponding bodies must appear
in the same compilation. Subunits of a generic must be part of the
same compilation (see 10.3(9)).